跳到主要内容

JZ52 正则表达式匹配

https://www.nowcoder.com/practice/28970c15befb4ff3a264189087b99ad4

第一次解

基本就是放弃了....

public class Solution {
/**
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
// 不想做这题
return Pattern.matches(pattern, str);
}
}

第二次解

这题真的很难!!等以后重写

    public boolean match(String str, String pattern) {
// write code here
if (str == null || pattern == null) return false;
int strIndex = 0;
int patternIndex = 0;
char[] ch1 = str.toCharArray();
char[] ch2 = pattern.toCharArray();
return matchCore(ch1, ch2, strIndex, patternIndex);
}

public boolean matchCore(char[] str, char[] pattern, int strIndex, int patternIndex) {
if (strIndex == str.length && patternIndex == pattern.length) {
return true;
}

if (strIndex != str.length && patternIndex == pattern.length) {
return false;
}
// 当下一个字符为 * 的情况
if (patternIndex + 1 < pattern.length && pattern[patternIndex + 1] == '*') {

if ((strIndex != str.length && pattern[patternIndex] == str[strIndex]) ||
(pattern[patternIndex] == '.' && strIndex != str.length)) {
return matchCore(str, pattern, strIndex, patternIndex + 2) ||
matchCore(str, pattern, strIndex + 1, patternIndex + 2) ||
matchCore(str, pattern, strIndex + 1, patternIndex);
} else {
return matchCore(str, pattern, strIndex, patternIndex + 2);
}
}

// 匹配成功则正常的判断下一个子串
if ((strIndex != str.length && pattern[patternIndex] == str[strIndex]) || (pattern[patternIndex] == '.' && strIndex != str.length)) {
return matchCore(str, pattern, strIndex + 1, patternIndex + 1);
}

return false;
}